//package com.atguigu.exception;
//
//import org.springframework.ui.Model;
//import org.springframework.web.bind.annotation.ControllerAdvice;
//import org.springframework.web.bind.annotation.ExceptionHandler;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//
///**
// * 包名:com.atguigu.exception
// * @author Leevi
// * 日期2021-09-07  15:25
// * 1. 异常处理器类上必须要添加ControllerAdvice注解
// * 2. 包扫描一定要扫描到这个异常处理器类
// * 3. 在异常处理器类中编写方法处理各种异常，方法上一定要添加ExceptinHandler注解
// *    ，该方法才能处理异常。该注解的value属性表示你这个方法要处理的异常的类型
// */
//@ControllerAdvice
//public class MyExceptionHandler {
//    @ExceptionHandler(value = Exception.class)
//    public String resolveNullPointerException(HttpServletResponse response,
//                                              HttpServletRequest request,
//                                              Exception e, Model model) throws IOException {
//        //这个方法处理空指针异常
//        if(!judgeRequestType(request)){
//            //说明当前是异步请求:使用response向客户端响应异常信息
//            response.getWriter().write(e.getMessage());
//            return null;
//        }
//        //要获取异常信息，并且将异常信息存储到请求域
//        model.addAttribute("atguiguException",e);
//        //这个方法返回:异常处理页面的逻辑视图
//        return "error";
//    }
//
//    /**
//     * 判断请求类型，如果返回true就是同步请求，返回false就是异步请求
//     * @param request
//     * @return
//     */
//    private boolean judgeRequestType(HttpServletRequest request) {
//        //加入代码判断当前请求是同步请求还是异步请求:通过accept或者X-Requested-With
//        String acceptHeader = request.getHeader("Accept");
//        String xRequestHeader = request.getHeader("X-Requested-With");
//
//        return !((acceptHeader != null && acceptHeader.contains("application/json")) ||
//                (xRequestHeader != null && xRequestHeader.equals("XMLHttpRequest")));
//    }
//}
